unit ListadoReservasPorPaqueteUt;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls,
  Data.DB, MemDS, DBAccess, Uni, frxClass, frxExportPDF, frxDBSet, ComObj;

type
  TListadoReservasPorPaquete = class(TForm)
    pnlTitulo: TPanel;
    lblConsulta: TLabel;
    pnlDatos: TPanel;
    rgDatos: TGroupBox;
    lblCategoriaPresu: TLabel;
    dbDescPaquete: TEdit;
    btnBuscarPaquete: TBitBtn;
    dbCodigoPaquete: TEdit;
    qryNombrePaquete: TUniQuery;
    qryNombrePaqueteID_PAQUETE_TURISTICO: TIntegerField;
    qryNombrePaqueteDENOMINACION: TStringField;
    btnCerrar: TBitBtn;
    btnListado: TBitBtn;
    qryListado: TUniQuery;
    frxDSListado: TfrxDBDataset;
    frxListado: TfrxReport;
    frxPDFListado: TfrxPDFExport;
    qryListadoO_NRO: TIntegerField;
    qryListadoO_ID_FECHAS: TIntegerField;
    qryListadoO_PARTIDA: TDateField;
    qryListadoO_LLEGADA: TDateField;
    qryListadoO_ID_RESERVA: TIntegerField;
    qryListadoO_ID_PAQUETE: TIntegerField;
    qryListadoO_DESC_PAQUETE: TStringField;
    qryListadoO_DOC_CLIENTE: TStringField;
    qryListadoO_DESC_CLIENTE: TStringField;
    qryListadoO_EMISION: TDateField;
    qryListadoO_VENCIMIENTO: TDateField;
    qryListadoO_ESTADO_RESERVA: TStringField;
    qryListadoO_SENHA: TFloatField;
    btnExcel: TBitBtn;
    procedure btnBuscarPaqueteClick(Sender: TObject);
    procedure dbCodigoPaqueteExit(Sender: TObject);
    procedure btnListadoClick(Sender: TObject);
    procedure btnCerrarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnExcelClick(Sender: TObject);
  private
    procedure MontaPlanilla;
    procedure MontaListado;
  public
    { Public declarations }
  end;

var
  ListadoReservasPorPaquete: TListadoReservasPorPaquete;

implementation

{$R *.dfm}

uses DMTuristikUt;

procedure TListadoReservasPorPaquete.btnBuscarPaqueteClick(Sender: TObject);
begin
  dbCodigoPaquete.Text := ShowBuscarPaquetesListado('');
  dbCodigoPaqueteExit(Self);
end;

procedure TListadoReservasPorPaquete.btnCerrarClick(Sender: TObject);
begin
  Self.Close;
end;

procedure TListadoReservasPorPaquete.btnExcelClick(Sender: TObject);
begin
  MontaListado;
  MontaPlanilla;
end;

procedure TListadoReservasPorPaquete.btnListadoClick(Sender: TObject);
begin
  if ((dbDescPaquete.Text <> '<< SELECCIONAR UN PAQUETE TURISTICO >>') and (dbDescPaquete.Text <> EmptyStr)) then
  begin
    MontaListado;
    frxListado.ShowReport();
  end
  else
  begin
    ShowMessage('Debe seleccionar un paquete turistico.');
    btnBuscarPaquete.SetFocus;
    Exit;
  end;
end;

procedure TListadoReservasPorPaquete.dbCodigoPaqueteExit(Sender: TObject);
var
  vWherePaquete : String;
begin
  vWherePaquete := '';
  if dbCodigoPaquete.Text <> EmptyStr then
  begin
    qryNombrePaquete.Close;
    vWherePaquete := ' pt.estado_registro = ''A'' and pt.id_paquete_turistico = ' + dbCodigoPaquete.Text;
    ReemplazarWhere(qryNombrePaquete.SQL, vWherePaquete);
    qryNombrePaquete.Open;
    if not qryNombrePaquete.IsEmpty then
    begin
      dbDescPaquete.Text := qryNombrePaqueteDENOMINACION.AsString;
      dbCodigoPaquete.Text := qryNombrePaqueteID_PAQUETE_TURISTICO.AsString;
    end
    else
    begin
      dbCodigoPaquete.Text := '0';
      dbDescPaquete.Text := '<< SELECCIONAR UN PAQUETE TURISTICO >>';
      Exit;
    end;
  end;
end;

procedure TListadoReservasPorPaquete.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  qryNombrePaquete.Close;
  qryListado.Close;
  dbDescPaquete.Text := '<< SELECCIONAR UN PAQUETE TURISTICO >>';
  Action := caFree;
end;

procedure TListadoReservasPorPaquete.MontaListado;
begin
  qryListado.Close;
  qryListado.Params.ParamByName('I_ID_PAQUETE').AsInteger := StrToInt(dbCodigoPaquete.Text);
  qryListado.Open;
end;

procedure TListadoReservasPorPaquete.MontaPlanilla;
var
    campo    : integer;
    linha    : integer;
    coluna   : integer;
    final    : integer;
    excel    : variant;
    valor    : string;
    valor1   : real;
begin
    Screen.Cursor           := crHourGlass;
    try
      excel:=CreateOleObject('Excel.Application');
      excel.Workbooks.add(1);

      linha := 7;
      final := qryListado.FieldCount;

      qryListado.First;
      while ( not qryListado.Eof ) do begin
          campo  := 0;
          coluna := 1;
          while ( campo < final ) do begin
            if ( Copy( qryListado.Fields[ campo ].DisplayLabel, 1, 1 ) = '#' ) then begin
                    case qryListado.Fields[campo].DataType of
                    ftString :
                        begin
                            valor := qryListado.Fields[ campo ].AsString;
                            excel.cells[ linha, coluna ] := Trim( valor );
                        end;
                    ftFloat  :
                        begin
                            valor1 := qryListado.Fields[ campo ].Value;
                            excel.cells[ linha, coluna ] :=  valor1;
                        end;
                    ftDatetime :
                        begin
                            excel.cells[ linha, coluna ] := formatdatetime('mm/dd/yy',qryListado.Fields[ campo ].AsDateTime);
                        end;
                    else
                        begin
                            valor := qryListado.Fields[ campo ].AsString;
                            excel.cells[ linha, coluna ] := Trim( valor );
                        end;
                    end;
                    coluna := coluna + 1;
                end;
                campo := campo + 1;
            end;
            qryListado.Next;
            linha := linha + 1;
        end;

        campo  := 0;
        coluna := 1;
        while ( campo < final ) do begin
            if ( Copy( qryListado.Fields[ campo ].DisplayLabel, 1, 1 ) = '#' ) then begin
                valor := Trim( Copy( qryListado.Fields[ campo ].DisplayLabel, 2, 80 ) );
                excel.cells[ 5, coluna ] := valor;
                excel.cells[ 6, coluna ] := Replicate( '-', qryListado.Fields[ campo ].DisplayWidth );
                coluna := coluna + 1;
            end;
            campo := campo + 1;
        end;

        // Filtros
        excel.cells[ 1, 1 ] := 'Listado de Servicios';
        excel.cells[ 2, 1 ] := 'Empresa: Kaavo Turismo';
        excel.cells[ 3, 1 ] := 'Paquete Turistico: ' + dbDescPaquete.Text;

        excel.columns.AutoFit;
        excel.visible:=true;

    except
        Application.MessageBox ('No es posible exportar a Excel...','Error',MB_OK+MB_ICONStop);
    end;
    Screen.Cursor := crDefault;
end;

end.
